package dao

import (
	"time"
)

// 这是 AfterSale 的全局公开dao对象，被service层调用!
var AfterSaleDao = afterSaleDao{}

// 售后表
// 这是 after_sale表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type AfterSale struct {
	Id          int32     `json:"id" form:"id" v:"id" db:"id"`
	AfterSaleSn string    `json:"after_sale_sn" form:"after_sale_sn" v:"after_sale_sn" db:"after_sale_sn"` // 售后编号
	OrderId     int32     `json:"order_id" form:"order_id" v:"order_id" db:"order_id"`                     // 订单ID
	UserId      int32     `json:"user_id" form:"user_id" v:"user_id" db:"user_id"`                         // 用户ID
	Type        int16     `json:"type" form:"type" v:"type" db:"type"`                                     // 售后类型，0是未收货退款，1是已收货（无需退货）退款，2用户退货退款
	Reason      string    `json:"reason" form:"reason" v:"reason" db:"reason"`                             // 退款原因
	Amount      float64   `json:"amount" form:"amount" v:"amount" db:"amount"`                             // 退款金额
	Pictures    string    `json:"pictures" form:"pictures" v:"pictures" db:"pictures"`                     // 退款凭证图片链接数组
	Comment     string    `json:"comment" form:"comment" v:"comment" db:"comment"`                         // 退款说明
	Status      int16     `json:"status" form:"status" v:"status" db:"status"`                             // 售后状态，0是可申请，1是用户已申请，2是管理员审核通过，3是管理员退款成功，4是管理员审核拒绝，5是用户已取消
	HandleTime  time.Time `json:"handle_time" form:"handle_time" v:"handle_time" db:"handle_time"`         // 管理员操作时间
	AddTime     time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`                     // 添加时间
	UpdateTime  time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"`         // 更新时间
	Deleted     int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`            // 逻辑删除

}

// 注意:这是 AfterSale 的私有dao对象，只能在dao层内使用!
type afterSaleDao struct {
	InsertTemplate func(arg AfterSale) (int64, error)           //插入一条记录
	UpdateTemplate func(arg AfterSale) (int64, error)           //更新一条记录
	DeleteTemplate func(id int64) (int64, error)                `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (AfterSale, error)            `args:"id"` //根据传入的主键获取一条记录
	List           func(arg AfterSaleList) ([]AfterSale, error) //模糊分页查询
}

/*
// 这是 after_sale 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type AfterSalePostman struct {
id
after_sale_sn
order_id
user_id
type
reason
amount
pictures
comment
status
handle_time
add_time
update_time
deleted

}*/

// 这是 after_sale 表的批量请求参数
type AfterSaleReq struct {
	List []AfterSale `json:"list" form:"list"`
}

// 这是 afterSaleDao.List()方法的请求参数
type AfterSaleList struct {
	Page
}
